热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入解析C++中的String和Vector

本文详细介绍了C++编程语言中String和Vector的使用方法及特性,旨在帮助开发者更好地理解和应用这两个重要的容器。

前言:本文由编程笔记编辑团队精心整理,旨在为读者提供关于 C++ 中 String 和 Vector 的深入理解,以提升编程技能。



String 类型详解


在 C++ 中,string 类位于标准库 内,并且属于 std 命名空间。string 是一种特殊的类,用于处理文本字符串。


可以使用等号 "=" 对 string 对象进行赋值操作,也可以使用加号 "+" 来拼接两个 string 对象。无需担心目标 string 是否有足够的空间来存储新的值,因为 C++ 会自动管理这些细节。此外,可以直接使用关系运算符(如 <, >, ==, != 等)来比较两个 string 对象的值。


string phrase; // 创建一个空的 string 对象
string noun("ants"); // 使用字符串常量初始化 string 对象
string noun = "ants"; // 同上,但使用了不同的语法形式

当使用 >> 运算符从标准输入读取 string 时,它会在遇到第一个空白字符时停止。若需读取包含空格的整行文本,应使用 getline 函数。


getline(cin, str); // 读取一行文本
getline(cin, str, '?'); // 读取至 '?' 字符为止,'?' 将被读取并丢弃

getline 函数的返回值不是 void,而是引用了第一个参数,这使得可以在链式调用中使用 getline。


getline(cin, s1) >> s2 == getline(cin, s1); cin >> s2;

每个 string 对象都提供了 length 成员函数,用于获取字符串的实际长度。使用方括号 "[]" 访问 string 中的字符不会进行越界检查,但可以通过成员函数 at 实现安全的访问。


str[6] == str.at(6)

对于 C 风格的字符串操作函数(如 strcpy),它们不接受 C++ 的 string 对象作为参数。若要使用这些函数,需要先通过 c_str 成员函数将 string 转换为 C 风格的字符串。


char carr[] = "test"; // C 风格的字符串
string s = "test"; // C++ 的 string 对象
strcpy(carr, s.c_str()); // 正确的转换方式



Vector 容器解析


vector 容器类似于传统的数组,但具有动态调整大小的能力,是 C++ STL(标准模板库)的重要组成部分。


vector v; // 定义一个空的整数 vector

vector 是一个模板类,这意味着它可以用来创建任何类型的容器,例如 vector 表示一个整数类型的 vector。声明时调用了 vector 的默认构造函数,初始化了一个空的 vector 对象。


可以使用 "[]" 下标操作符访问 vector 中的元素。与数组不同,"[]" 只能用于修改已存在的元素,不能用于初始化新元素。向 vector 添加新元素时,通常使用 push_back 方法,该方法会将新元素添加到 vector 的末尾。


vector a;
a.push_back(1);
a.push_back(10);
a.push_back(101);

vector 支持使用赋值运算符 "=" 进行整体复制。vector 的大小(即元素数量)可以通过 size 成员函数获取,其返回值类型为 unsigned int。


vector 提供了一个带参数的构造函数,可以初始化指定数量的元素。对于复杂类型的元素,构造函数会调用该类型的默认构造函数来初始化这些元素。


vector v(10); // 初始化 10 个元素,全部设置为 0
vector v;
for (unsigned int i = 0; i <10; i++) {
v[i] = i; // 只能在声明后立即执行
}

vector 的定义位于标准库 中,并使用 std 命名空间。尝试访问超出 vector 当前大小的元素不会引发编译错误,但会导致未定义行为。


vector 的容量(capacity)是指其当前分配的内存空间能够存储的最大元素数量,可以通过 capacity 成员函数查询。当 vector 的容量不足以容纳更多元素时,它会自动扩展。也可以通过 reserve 成员函数手动增加 vector 的容量。


v.reserve(32); // 设置容量至少为 32 个元素
v.reserve(v.size() + 10); // 设置容量至少比当前大小多 10 个元素

需要注意的是,reserve 方法只能增加 vector 的容量,而不能减少。如果需要改变 vector 的大小,可以使用 resize 成员函数。resize 方法在增加大小时会使用元素类型的默认构造函数初始化新元素,在减少大小时会删除多余的元素。


推荐阅读
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 本题探讨了在大数据结构背景下,如何通过整体二分和CDQ分治等高级算法优化处理复杂的时间序列问题。题目设定包括节点数量、查询次数和权重限制,并详细分析了解决方案中的关键步骤。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 本文介绍如何使用MFC和ADO技术调用SQL Server中的存储过程,以查询指定小区在特定时间段内的通话统计数据。通过用户界面选择小区ID、开始时间和结束时间,系统将计算并展示小时级的通话量、拥塞率及半速率通话比例。 ... [详细]
  • 本文详细解析了Java中hashCode()和equals()方法的实现原理及其在哈希表结构中的应用,探讨了两者之间的关系及其实现时需要注意的问题。 ... [详细]
  • 本文详细介绍了如何在 MySQL 数据库中进行表结构的修改,包括添加字段、修改字段类型和重命名列名等操作,旨在为开发者提供实用的技术参考。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 本文介绍如何使用 Angular 6 的 HttpClient 模块来获取 HTTP 响应头,包括代码示例和常见问题的解决方案。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 本文介绍了如何使用JavaScript的Fetch API与Express服务器进行交互,涵盖了GET、POST、PUT和DELETE请求的实现,并展示了如何处理JSON响应。 ... [详细]
  • Java项目分层架构设计与实践
    本文探讨了Java项目中应用分层的最佳实践,不仅介绍了常见的三层架构(Controller、Service、DAO),还深入分析了各层的职责划分及优化建议。通过合理的分层设计,可以提高代码的可维护性、扩展性和团队协作效率。 ... [详细]
  • 本文探讨了如何通过预处理器开关选择不同的类实现,并解决在特定情况下遇到的链接器错误。 ... [详细]
  • 本文介绍如何利用栈数据结构在C++中判断字符串中的括号是否匹配。通过顺序栈和链栈两种方式实现,并详细解释了算法的核心思想和具体实现步骤。 ... [详细]
author-avatar
陈旺财九_999
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有